Stack, Queue and List Routines
====================================================================================

Commands for string manipulation in a stack, queue and list.
By Doug Pankhurst Feb 2013


String Operations
-----------------

S.STACK.CREATE string$,width

Create a string as a holder for multiple substrings of width characters long for use as a Last In, First Out (LIFO) stack. Maximum number of substrings is width x number of substrings =< 250. Eg. max 25 of 10 character longs strings. Strings of less than width are right justified and padded with spaces.

Routine returns with string$ set up as the holder with the width in character positions 1 and 2 (maximum 99) and a pointer to the bottom of the stack + 1 in positions 3, 4 and 5.


S.STACK.PUSH string$,data$

Push data$ onto stack string$. If data$ is shorter than width, data$ is right justified and padded with spaces.


S.STACK.POP$(string$)

Function to pop the top substring off the stack string$.

All string stack operations are checked for overflow, underflow or substrings too wide.

Queue Operations
----------------

S.QUEUE.CREATE string$,width

Create a string as a holder for multiple substrings of width characters long for use as a First In, First Out (FIFO) queue. Maximum number of substrings is width x number of substrings =< 250. Eg. max 25 of 10 character longs strings. Strings of less than width are right justified and padded with spaces.

Routine returns with string$ set up as the holder with the width in character positions 1 and 2 (maximum 99) and a pointer to the bottom of the stack + 1 in positions 3, 4 and 5.


S.QUEUE.PUSH string$,data$

Push data$ onto queue string$. If data$ is shorter than width, data$ is right justified and padded with spaces.


S.QUEUE.PULL$(string$)

Function to pop the bottom (first) substring off the queue string$.

All string queue operations are checked for overflow, underflow or substrings too wide.

List Operations
---------------

S.LIST.CREATE string$,width

Create a string as a holder for multiple substrings of width characters long for use as a random access list. Maximum number of substrings is width x number of substrings =< 250. Eg. max 25 of 10 character longs strings. Strings of less than width are right justified and padded with spaces.

Routine returns with string$ set up as the holder with the width in character positions 1 and 2 (maximum 99) and a pointer to the bottom of the list + 1 in positions 3, 4 and 5.


S.LIST.ADD string$,data$

Add data$ onto list string$ at the bottom. If data$ is shorter than width, data$ is right justified and padded with spaces.


S.LIST.FILL string$,file$

Add data$ onto list string$ at the bottom from text file file$. Text file file$ must have each entry of length width or less and terminated with CRLF.  CRLF is stripped prior to data$ being added to list. If data$ is shorter than width, data$ is right justified and padded with spaces.


S.LIST.GET$(string$,index)

Function to return the list entry pointed to by index. The list is not modified.

All string list operations are checked for overflow or substrings too wide.

================================================================================

Commands for numeric manipulation in a stack.

Numeric Operations
------------------

N.STACK.CREATE string$,width

Create a string as a holder for multiple substrings of numeric variables for use as a Last In, First Out (LIFO) stack. Maximum number of numeric values pushed onto the stack is 62.

Routine returns with string$ set up as the holder with the width in character positions 1 and 2 (always 4) and a pointer to the bottom of the stack + 1 in positions 3, 4 and 5.


N.STACK.PUSH string$,data

Push numeric data onto stack string$.


N.STACK.POP(string$)

Function to pop the top numeric value off the stack string$.


N.STACK.AVERAGE(string$)

Function to return the average of all the numerical values on the stack.


All operations are checked for overflow, underflow or substrings too wide.


